﻿////////////////////////////////////////////////////////////////////////////////
//
// Работа со спецификацией LT_Spc.h
//
////////////////////////////////////////////////////////////////////////////////
#ifndef __LT_SPC_H
#define __LT_SPC_H



#ifndef __LTDEFINE_H
#include "LTDEFINE.H"
#endif

#ifndef __LIB_FUNC__
#define __LIB_FUNC__
#define LIB_FUNC WINAPI
#endif

extern "C" {
// Экспортный номер - 344
//------------------------------------------------------------------------------
// Создать объект спецификации
// составной объект
// Объект создается функцией ksSpcObjectEnd();
// для атрибутов, описанных  по ключам нужно указать тип в numb, потому что типов
// с одинаковыми ключами можент быть несколько
// nameLib и styleNumb - используются только для объектов СП в графическом документе,
// в спецификации не используются
// ---
int LIB_FUNC ksSpcObjectCreate( char          *nameLib,    // имя библиотеки стилей
                                unsigned int   styleNumb,  // номер стиля спецификации
                                unsigned short secNumb,    // номер раздела
                                unsigned short subSecNumb, // номер подраздела
                                double         numb,       // для базового объекта- тип атрибута, который задан по ключам или 0
                                                           // для вспомогательного объекта - номер базового объекта, к которому прикрепляется вспомогательный либо 0
                                unsigned char  typeObj );  // тип объекта 0- базовый объект 1- вспомогательный


// Экспортный номер - 807
//------------------------------------------------------------------------------
// Создать объект спецификации
// составной объект
// Объект создается функцией ksSpcObjectEnd();
// для атрибутов, описанных  по ключам нужно указать тип в numb, потому что типов
// с одинаковыми ключами можент быть несколько
// nameLib и styleNumb - используются только для объектов СП в графическом документе,
// в спецификации не используются (Unicode)
// ---
int LIB_FUNC ksSpcObjectCreateW( LPWSTR         nameLib,    // имя библиотеки стилей
                                 unsigned int   styleNumb,  // номер стиля спецификации
                                 unsigned short secNumb,    // номер раздела
                                 unsigned short subSecNumb, // номер подраздела
                                 double         numb,       // для базового объекта- тип атрибута, который задан по ключам или 0
                                                           // для вспомогательного объекта - номер базового объекта, к которому прикрепляется вспомогательный либо 0
                                 unsigned char  typeObj );  // тип объекта 0- базовый объект 1- вспомогательный

#ifdef _UNICODE
#define ksSpcObjectCreateT  ksSpcObjectCreateW
#else
#define ksSpcObjectCreateT  ksSpcObjectCreate
#endif // !UNICODE


// Экспортный номер - 350
//------------------------------------------------------------------------------
// принять объект спецификации для редактирования
// Затем у объекта можно изменить атрибуты, геометрию, линии выноски, позицию,  массу.
// Редактирование данного объекта завершится вызовом функции ksSpcObjectEnd()
// ---
int LIB_FUNC ksSpcObjectEdit( reference spcObj );


// Экспортный номер - 345
//------------------------------------------------------------------------------
// Завершить объект спецификации
// Все изменения будут занесены в документ.
// Если объект новый,  подключается к соответствующему описанию спецификации
// текущего документа.
// возвращается указатель на объект СП
// ---
reference LIB_FUNC ksSpcObjectEnd();


// Экспортный номер - 346
//------------------------------------------------------------------------------
// Изменить значение компоненты с номером  itemNumb в колонке с номером  colNumb
// В случае записи в колонке может быть несколько компонент и itemNumb  может быть не равен 1
// typeVal - тип значения в интервале CHAR_ATTR_TYPE ...STRING_ATTR_TYPE см. ltdefine.h
// Если typeVal== STRING_ATTR_TYPE, то val - строка  char[MAX_TEXT_LENGTH]
// функция работает в режиме создания нового или редактирования существующего объекта спецификации
// ksSpcObjectCreate(...); или ksSpcObjectEdit(...);
//   .....
//   ksSpcChangeValue(...);
//   .....
// reference spsObj = ksSpcObjectEnd();
// ---
int LIB_FUNC ksSpcChangeValue( unsigned int  colNumb,     // номер колонки, начиная с единицы
                               unsigned int  itemNumb,    // номер компоненты, начиная с единицы
                               void         *val,         // указатель на значение
                               unsigned char typeVal   ); // тип значения


// Экспортный номер - 951
//------------------------------------------------------------------------------
// Изменить значение компоненты с номером  itemNumb в колонке с номером  colNumb
// В случае записи в колонке может быть несколько компонент и itemNumb  может быть не равен 1
// typeVal - тип значения в интервале CHAR_ATTR_TYPE ...STRING_ATTR_TYPE см. ltdefine.h
// Если typeVal== STRING_ATTR_TYPE, то val - строка  wchar_t[MAX_TEXT_LENGTH]
// функция работает в режиме создания нового или редактирования существующего объекта спецификации
// ksSpcObjectCreate(...); или ksSpcObjectEdit(...);
//   .....
//   ksSpcChangeValue(...);
//   .....
// reference spsObj = ksSpcObjectEnd();
// ---
int LIB_FUNC ksSpcChangeValueW( unsigned int  colNumb,      // номер колонки, начиная с единицы
                                unsigned int  itemNumb,     // номер компоненты, начиная с единицы
                                void *        val,          // указатель на значение
                                unsigned char typeVal   );

#ifdef _UNICODE
#define ksSpcChangeValueT  ksSpcChangeValueW
#else
#define ksSpcChangeValueT  ksSpcChangeValue
#endif // !UNICODE


// Экспортный номер - 347
//------------------------------------------------------------------------------
// Изменить значение компоненты с номером  itemNumb в колонке с номером  colNumb
// В случае записи в колонке может быть несколько компонент и itemNumb  может быть не равен 1
// typeVal - тип значения в интервале CHAR_ATTR_TYPE ...STRING_ATTR_TYPE см. ltdefine.h
// функция работает в режиме создания нового или редактирования существующего объекта спецификации
// ksSpcObjectCreate(...); или ksSpcObjectEdit(...);
//   .....
//   ksSpcVisible(...);
//   .....
// reference spsObj = ksSpcObjectEnd();
// ---
int LIB_FUNC ksSpcVisible( unsigned int colNumb,       //номер колонки, начиная с единицы
                           unsigned int  itemNumb,     //номер компоненты, начиная с единицы
                           unsigned char flagOn );    //1 -включить компоненту 0- выключить


// Экспортный номер - 348
//------------------------------------------------------------------------------
// Установить массу детали. Функция успешно завершится и вернет 1, если в объекте
// существует колонка с типом колонки "масса". В случае неудачи возвращается 0.
// функция работает в режиме создания нового или редактирования существующего
// объекта спецификации
// ksSpcObjectCreate(...); или ksSpcObjectEdit(...);
//   .....
//   ksSpcMassa(...);
//   .....
// reference spsObj = ksSpcObjectEnd();
// ---
int LIB_FUNC ksSpcMassa( char *sMassa ); // масса детали


// Экспортный номер - 808
//------------------------------------------------------------------------------
// Установить массу детали. Функция успешно завершится и вернет 1, если в объекте
// существует колонка с типом колонки "масса". В случае неудачи возвращается 0.
// функция работает в режиме создания нового или редактирования существующего
// объекта спецификации (Unicode)
// ksSpcObjectCreate(...); или ksSpcObjectEdit(...);
//   .....
//   ksSpcMassa(...);
//   .....
// reference spsObj = ksSpcObjectEnd();
// ---
int LIB_FUNC ksSpcMassaW( LPWSTR sMassa ); // масса детали

#ifdef _UNICODE
#define ksSpcMassaT  ksSpcMassaW
#else
#define ksSpcMassaT  ksSpcMassa
#endif // !UNICODE


// Экспортный номер - 363
//------------------------------------------------------------------------------
// Установить количество детали для определенного исполнения.Функция успешно завершится и вернет 1, если в объекте существует колонка
// с типом колонки "количество". В случае неудачи возвращается 0.
// функция работает в режиме создания нового или редактирования существующего объекта спецификации
// ksSpcObjectCreate(...); или ksSpcObjectEdit(...);
//   .....
//   ksSpcCount(...);
//   .....
// reference spsObj = ksSpcObjectEnd();
// ---
int LIB_FUNC ksSpcCount ( unsigned char ispoln,  // номер исполнения
                          char         *sCount );// количество деталей


// Экспортный номер - 809
//------------------------------------------------------------------------------
// Установить количество детали для определенного исполнения.Функция успешно завершится и вернет 1, если в объекте существует колонка
// с типом колонки "количество". В случае неудачи возвращается 0.
// функция работает в режиме создания нового или редактирования существующего объекта спецификации
// ksSpcObjectCreate(...); или ksSpcObjectEdit(...); (Unicode)
//   .....
//   ksSpcCount(...);
//   .....
// reference spsObj = ksSpcObjectEnd();
// ---
int LIB_FUNC ksSpcCountW ( unsigned char ispoln,  // номер исполнения
                           LPWSTR sCount );// количество деталей

#ifdef _UNICODE
#define ksSpcCountT  ksSpcCountW
#else
#define ksSpcCountT  ksSpcCount
#endif // !UNICODE


// Экспортный номер - 349
//------------------------------------------------------------------------------
// Установить  номер позиции.Функция успешно завершится и вернет 1, если в объекте
// существует колонка с типом колонки "позициия". В случае неудачи возвращается 0.
// функция работает в режиме создания нового или редактирования существующего
// объекта спецификации
// ksSpcObjectCreate(...); или ksSpcObjectEdit(...);
//   .....
//   ksSpcPosition(...);
//   .....
// reference spsObj = ksSpcObjectEnd();
// ---
int LIB_FUNC ksSpcPosition( unsigned short pos );


// Экспортный номер - 351
//------------------------------------------------------------------------------
// Добавить или изменить геометрию или линии выноски в объекте спецификации.
// Передавать можно группу или отдельный объект.Функция успешно завершится и вернет
// 1, если в объекте предусмотрена возможность подключения геоментрии. В случае
// неудачи возвращается 0.
// Функция работает в режиме создания нового или редактирования существующего
// объекта спецификации
// ksSpcObjectCreate(...); или ksSpcObjectEdit(...);
//   .....
//   ksSpcIncludeReference(...);
//   .....
// reference spsObj = ksSpcObjectEnd();
// Если obj == 0 и clear == 0 очищается список объектов и список линий выносок
// ---
int LIB_FUNC ksSpcIncludeReference( reference     obj,     // группа объектов или объект вида
                                    unsigned char clear ); // 2 - очистить список линий выносок 
                                                           // 1 - очистить предыдущую геоментрию 
                                                           // 0 - добавить к предыдущей


// Экспортный номер - 352
//------------------------------------------------------------------------------
// получить указатель  объекта СП по геометрии для текущего графического документа
// если obj = 0 - для макрообъекта редактирования
// реализовано для equal = 1
// только для графических документов
// ---
reference LIB_FUNC ksGetSpcObjForGeom( char         *nameLib, // имя библиотеки типов спецификации
                                       unsigned int  numb,    // номер типа спецификации
                                       reference     obj,     // указатель на геометрию -группа или объект
                                       unsigned char equal,   // 1 - присланная геометрия идентична геометрии объекта СП; 0- входит в объект СП
                                       unsigned char first ); // 1 -первый объект 0- следующий объект



// Экспортный номер - 365
//------------------------------------------------------------------------------
// получить указатель объекта СП по геометрии с ограничениями по номеру раздела и типу атрибута
// если obj = 0 - для макрообъекта редактирования
// только для графических документов

// ---
reference LIB_FUNC ksGetSpcObjForGeomWithLimit( char          *nameLib, // имя библиотеки типов спецификации
                                                unsigned int   numb,    // номер типа спецификации
                                                reference      obj,     // указатель на геометрию -группа или объект
                                                unsigned char  equal,   // 1 - присланная геометрия идентична геометрии объекта СП; 0- входит в объект СП
                                                unsigned char  first,   // 1 -первый объект 0- следующий объект
                                                unsigned short section, // номер раздела, для которого найти объект, если 0 - не ограничивается
                                                double         attrTypeNumb ); // номер типа атрибута для которого найти объект, если 0 - не ограничивается


// Экспортный номер - 811
//------------------------------------------------------------------------------
// получить указатель объекта СП по геометрии с ограничениями по номеру раздела и типу атрибута
// если obj = 0 - для макрообъекта редактирования
// только для графических документов (Unicode)
// ---
reference LIB_FUNC ksGetSpcObjForGeomWithLimitW( LPWSTR         nameLib, // имя библиотеки типов спецификации
                                                 unsigned int   numb,    // номер типа спецификации
                                                 reference      obj,     // указатель на геометрию -группа или объект
                                                 unsigned char  equal,   // 1 - присланная геометрия идентична геометрии объекта СП; 0- входит в объект СП
                                                 unsigned char  first,   // 1 -первый объект 0- следующий объект
                                                 unsigned short section, // номер раздела, для которого найти объект, если 0 - не ограничивается
                                                 double         attrTypeNumb ); // номер типа атрибута для которого найти объект, если 0 - не ограничивается

#ifdef _UNICODE
#define ksGetSpcObjForGeomWithLimitT  ksGetSpcObjForGeomWithLimitW
#else
#define ksGetSpcObjForGeomWithLimitT  ksGetSpcObjForGeomWithLimit
#endif // !UNICODE


// Экспортный номер - 408
//------------------------------------------------------------------------------
// получить название раздела спецификации по референсу объекта СП
// возвращает true в случае успешного завершения
// ---
int LIB_FUNC ksGetSpcSectionName( reference spcObj, // референс обеъекта спецификации
                                  char*     name,   // буфер для имени раздела
                                  int       size ); // размер буфера


// Экспортный номер - 812
//------------------------------------------------------------------------------
// получить название раздела спецификации по референсу объекта СП
// возвращает true в случае успешного завершения (Unicode)
// ---
int LIB_FUNC ksGetSpcSectionNameW( reference spcObj, // референс обеъекта спецификации
                                   LPWSTR    name,   // буфер для имени раздела
                                   int       size ); // размер буфера

#ifdef _UNICODE
#define ksGetSpcSectionNameT  ksGetSpcSectionNameW
#else
#define ksGetSpcSectionNameT  ksGetSpcSectionName
#endif // !UNICODE


// Экспортный номер - 356
//------------------------------------------------------------------------------
// Редактирование объекта спецификации.
// Функция запускает окно редактирования для объекта спецификации, расположенного
// в графическом документе.
// Функция запускает процесс. Так как ситема может работать только с одним процессом,
// то нужно завершить другие процессные функции Cursor, Placement, CommandWindow,
// ksEditViewObject, ksCreateViewObject;
// ---
int LIB_FUNC ksEditWindowSpcObject( reference obj );


// Экспортный номер - 364
//------------------------------------------------------------------------------
// Выдать уникальный номер объекта спецификации
// ---
double LIB_FUNC ksGetSpcObjectNumber  ( reference spcObj );


// Экспортный номер - 220
//------------------------------------------------------------------------------
// создать итератор для хождения по объектам спецификации
// описание спецификации определяется именем библиотеки стилей спецификации
// и номером  стиля
// nameLib и styleNumb - используются только для объектов СП в графическом документе,
// в спецификации не используются
// ---
reference LIB_FUNC CreateSpcIterator( char        *nameLib,      // имя библиотеки стилей спецификации
                                      unsigned int styleNumb,    // номер стиля спецификации
                                      int          spcObjType ); // 0 - базовые объекты 1 - вспомагательные объекты
                                                                 // 2- базовые и вспомагательные объекты из сортированного массива
                                                                 // 3- все объекты

// Экспортный номер - 813
//------------------------------------------------------------------------------
// создать итератор для хождения по объектам спецификации
// описание спецификации определяется именем библиотеки стилей спецификации
// и номером  стиля
// nameLib и styleNumb - используются только для объектов СП в графическом документе,
// в спецификации не используются
// ---
reference LIB_FUNC CreateSpcIteratorW( LPWSTR       nameLib,      // имя библиотеки стилей спецификации
                                       unsigned int styleNumb,    // номер стиля спецификации
                                       int          spcObjType ); // 0 - базовые объекты 1 - вспомагательные объекты
                                                                  // 2- базовые и вспомагательные объекты из сортированного массива
                                                                  // 3- все объекты

#ifdef _UNICODE
#define CreateSpcIteratorT  CreateSpcIteratorW
#else
#define CreateSpcIteratorT  CreateSpcIterator
#endif // !UNICODE


// Экспортный номер - 367
//------------------------------------------------------------------------------
// Выдать объект спецификации по номеру
// ---
reference LIB_FUNC ksGetSpcObject( double objNumb );


// Экспортный номер - 368
//------------------------------------------------------------------------------
// Выдать текстовую строку для определенного типа колонки и исполнения
// Номер блока block = 0 - число исполнений меньше количества исполнений в бланке спецификации
// ( для групповой спецификации 2.113-75 число исполнений меньше 10 )
// функция возвращает 0 в случае успеха или количество символов, если  длина size_s
// оказалась меньше требуемой, -1 в случае ошибки
// ---
int LIB_FUNC ksGetSpcObjectColumnText( reference spcObj,        // объект спецификации
                                       unsigned int columnType, // тип колонки SPC_CLM_FORMAT...SPC_CLM_USER
                                       unsigned int ispoln,     // исполнение данного типа
                                       unsigned int block,      // номер блока
                                       char        *s,          // указатель
                                       unsigned int size_s );   // длина строки s


// Экспортный номер - 814
//------------------------------------------------------------------------------
// Выдать текстовую строку для определенного типа колонки и исполнения
// Номер блока block = 0 - число исполнений меньше количества исполнений в бланке спецификации
// ( для групповой спецификации 2.113-75 число исполнений меньше 10 )
// функция возвращает 0 в случае успеха или количество символов, если  длина size_s
// оказалась меньше требуемой, -1 в случае ошибки (Unicode)
// ---
int LIB_FUNC ksGetSpcObjectColumnTextW( reference spcObj,        // объект спецификации
                                        unsigned int columnType, // тип колонки SPC_CLM_FORMAT...SPC_CLM_USER
                                        unsigned int ispoln,     // исполнение данного типа
                                        unsigned int block,      // номер блока
                                        LPWSTR       s,          // указатель
                                        unsigned int size_s );   // длина строки s

#ifdef _UNICODE
#define ksGetSpcObjectColumnTextT  ksGetSpcObjectColumnTextW
#else
#define ksGetSpcObjectColumnTextT  ksGetSpcObjectColumnText
#endif // !UNICODE


// Экспортный номер - 369
//-------------------------------------------------------------------------------------------------
// Заменить текст в определенного типа колонке и исполнении
// Номер блока block = 0 - число исполнений меньше количества исполнений в бланке спецификации
// ( для групповой спецификации 2.113-75 число исполнений меньше 10 )
// функция возвращает 1 в случае успеха или 0 в случае неудачи
// функция работает в режиме создания нового или редактирования существующего объекта спецификации
// ksSpcObjectCreate(...); или ksSpcObjectEdit(...);
//   .....
//   ksSetSpcObjectColumnText(...);
//   .....
// reference spsObj = ksSpcObjectEnd();
// ---
int LIB_FUNC ksSetSpcObjectColumnText( unsigned int columnType, // тип колонки SPC_CLM_FORMAT...SPC_CLM_USER
                                       unsigned int ispoln,     // исполнение данного типа
                                       unsigned int block,      // номер блока
                                       char        *s );        // указатель


// Экспортный номер - 815
//-------------------------------------------------------------------------------------------------
// Заменить текст в определенного типа колонке и исполнении
// Номер блока block = 0 - число исполнений меньше количества исполнений в бланке спецификации
// ( для групповой спецификации 2.113-75 число исполнений меньше 10 )
// функция возвращает 1 в случае успеха или 0 в случае неудачи
// функция работает в режиме создания нового или редактирования существующего объекта спецификации
// ksSpcObjectCreate(...); или ksSpcObjectEdit(...); (Unicode)
//   .....
//   ksSetSpcObjectColumnText(...);
//   .....
// reference spsObj = ksSpcObjectEnd();
// ---
int LIB_FUNC ksSetSpcObjectColumnTextW( unsigned int columnType, // тип колонки SPC_CLM_FORMAT...SPC_CLM_USER
                                        unsigned int ispoln,     // исполнение данного типа
                                        unsigned int block,      // номер блока
                                        LPWSTR       s );        // указатель


#ifdef _UNICODE
#define ksSetSpcObjectColumnTextT  ksSetSpcObjectColumnTextW
#else
#define ksSetSpcObjectColumnTextT  ksSetSpcObjectColumnText
#endif // !UNICODE


// Экспортный номер - 375
//------------------------------------------------------------------------------
// Получить количество колонок для стиля спецификации в текущем документе
// Если документ спецификация, nameLib и numb не используются.
// Если число исполнений больше количества исполнений в бланке спецификации,
// количество колонок  выдается с учетом всех исполнений.
// Функция возвращает количество колонок в случае успеха и 0 в случае неудачи
// ---
int LIB_FUNC ksGetSpcTableColumn( char *nameLib, unsigned int numb, // имя библиотеки типов и номер типа спецификации
                                  unsigned char additioanalCol );   // 0 - основные колонки( отображаются в таблице СП) 1- дополнительные колонки


// Экспортный номер - 816
//------------------------------------------------------------------------------
// Получить количество колонок для стиля спецификации в текущем документе
// Если документ спецификация, nameLib и numb не используются.
// Если число исполнений больше количества исполнений в бланке спецификации,
// количество колонок  выдается с учетом всех исполнений.
// Функция возвращает количество колонок в случае успеха и 0 в случае неудачи
// ---
int LIB_FUNC ksGetSpcTableColumnW( LPWSTR nameLib, unsigned int numb, // имя библиотеки типов и номер типа спецификации
                                   unsigned char additioanalCol );   // 0 - основные колонки( отображаются в таблице СП) 1- дополнительные колонки


#ifdef _UNICODE
#define ksGetSpcTableColumnT  ksGetSpcTableColumnW
#else
#define ksGetSpcTableColumnT  ksGetSpcTableColumn
#endif // !UNICODE


// Экспортный номер - 376
//------------------------------------------------------------------------------
// По номеру колонки для данного объекта спецификации получить параметры колонки (
// тип колонки SPC_CLM_FORMAT...SPC_CLM_USER, исполнение данного типа, номер блокаа,
// тип значения( зависит от раздела), имя колонки )
// Если число исполнений больше количества исполнений в бланке спецификации,
// недостающие колонки исполнений пристыкованы справа от визуальных колонок,
// затем пристыкованы дополнительные колонки
// Функция возвращает 1  в случае успеха и 0 в случае неудачи
// ---
int LIB_FUNC ksGetSpcColumnType( reference       spcObj,  // объект спецификации
                                 unsigned int    colNumb, // номер колонки, начиная с 1
                                 SpcColumnParam *par );   // параметры колонки


// Экспортный номер - 817
//------------------------------------------------------------------------------
// По номеру колонки для данного объекта спецификации получить параметры колонки (
// тип колонки SPC_CLM_FORMAT...SPC_CLM_USER, исполнение данного типа, номер блокаа,
// тип значения( зависит от раздела), имя колонки )
// Если число исполнений больше количества исполнений в бланке спецификации,
// недостающие колонки исполнений пристыкованы справа от визуальных колонок,
// затем пристыкованы дополнительные колонки
// Функция возвращает 1  в случае успеха и 0 в случае неудачи (Unicode)
// ---
int LIB_FUNC ksGetSpcColumnTypeW( reference        spcObj,  // объект спецификации
                                  unsigned int     colNumb, // номер колонки, начиная с 1
                                  SpcColumnParamW *par );   // параметры колонки


#ifdef _UNICODE
#define ksGetSpcColumnTypeT  ksGetSpcColumnTypeW
#else
#define ksGetSpcColumnTypeT  ksGetSpcColumnType
#endif // !UNICODE


// Экспортный номер - 377
//------------------------------------------------------------------------------
// Для данного объекта спецификации
// по типу колонки SPC_CLM_FORMAT...SPC_CLM_USER, номеру исполнения данного типа и номеру блока
// получить номер колонки начиная с единицы
// Функция возвращает номер колонки в случае успеха и 0 в случае неудачи
// ---
int LIB_FUNC ksGetSpcColumnNumb( reference    spcObj,     // объект спецификации
                                 unsigned int columnType, // тип колонки SPC_CLM_FORMAT...SPC_CLM_USER
                                 unsigned int ispoln,     // исполнение данного типа начиная
                                 unsigned int block );    // номер блока


// Экспортный номер - 380
//------------------------------------------------------------------------------
// Получить динамический массив листов сборочного чертежа (CHAR_STR_ARR),
// подключенных к спецификации
// ---
reference LIB_FUNC ksGetSpcSheetSB( reference spcDoc ); // спецификация


// Экспортный номер - 987
//------------------------------------------------------------------------------
// Получить динамический массив листов сборочного чертежа (CHAR_STR_ARR_W),
// подключенных к спецификации
// ---
reference LIB_FUNC ksGetSpcSheetSB_W( reference spcDoc ); // спецификация

#ifdef _UNICODE
#define ksGetSpcSheetSB_T  ksGetSpcSheetSB_W
#else
#define ksGetSpcSheetSB_T  ksGetSpcSheetSB
#endif // !UNICODE


// Экспортный номер - 381
//------------------------------------------------------------------------------
// Заменить динамический массив листов сборочного чертежа, подключенных к спецификации
// ---
int LIB_FUNC ksSetSpcSheetSB( reference spcDoc, // спецификация
                              reference arr );  // динамический массив CHAR_STR_ARR или CHAR_STR_ARR_W 

// Экспортный номер - 398
//------------------------------------------------------------------------------
// Cпецификация на листе. Только для текущего описания листа
// onSheet - 1 -включить, 0- выключить
// Функция возвращает 1 в случае успешного завершения 0 - в случае неудачи
// ---
int LIB_FUNC ksSpecificationOnSheet( unsigned char onSheet );


// Экспортный номер - 413
//------------------------------------------------------------------------------
// Получить параметры для стиля спецификации с номером numb из библиотеки nameLib
// если nameLib = NULL параметры берутся у текущго документа, для текущего описания СП.
// tPar <=ALLPARAM          - заполняется структура SpcStyleParam
// tPar == SPC_TUNING_PARAM - заполняется структура SpcTuningStyleParam
// ---
int LIB_FUNC ksGetSpcStyleParam( char *       nameLib, // имя библиотеки типов
                                 unsigned int numb,    // номер типа спецификации
                                 void *       par,     // структура параметров
                                 unsigned int size,    // размер структуры параметров
                                 int          tPar );  // тип возвращаемых параметров

// Экспортный номер - 818
//------------------------------------------------------------------------------
// Получить параметры для стиля спецификации с номером numb из библиотеки nameLib
// если nameLib = NULL параметры берутся у текущго документа, для текущего описания СП.
// tPar <=ALLPARAM          - заполняется структура SpcStyleParam
// tPar == SPC_TUNING_PARAM - заполняется структура SpcTuningStyleParam (Unicode)
// ---
int LIB_FUNC ksGetSpcStyleParamW( LPWSTR       nameLib, // имя библиотеки типов
                                  unsigned int numb,    // номер типа спецификации
                                  void *       par,     // структура параметров
                                  unsigned int size,    // размер структуры параметров
                                  int          tPar );  // тип возвращаемых параметров

#ifdef _UNICODE
#define ksGetSpcStyleParamT  ksGetSpcStyleParamW
#else
#define ksGetSpcStyleParamT  ksGetSpcStyleParam
#endif // !UNICODE


// Экспортный номер - 414
//------------------------------------------------------------------------------
// возвращает параметры описания спецификации для документа pDoc
// index = -1 - текущее описание, (для документа-спецификации не используется)
// state - состояние описания ( true - текущее, false - нет )
// ---
int LIB_FUNC ksGetSpcDescription( reference       pDoc,     // указатель на документ
											            int             index,	   // индекс описания СП в документе
 											            SpcDescrParam * param,    // параметры описания
                                  unsigned char * state );  // состояние: true - активное, false - неактивное


// Экспортный номер - 819
//------------------------------------------------------------------------------
// возвращает параметры описания спецификации для документа pDoc
// index = -1 - текущее описание, (для документа-спецификации не используется)
// state - состояние описания ( true - текущее, false - нет ) (Unicode)
// ---
int LIB_FUNC ksGetSpcDescriptionW( reference        pDoc,     // указатель на документ
											            int              index,	   // индекс описания СП в документе
 											            SpcDescrParamW * param,    // параметры описания
                                  unsigned char  * state );  // состояние: true - активное, false - неактивное

#ifdef _UNICODE
#define ksGetSpcDescriptionT  ksGetSpcDescriptionW
#else
#define ksGetSpcDescriptionT  ksGetSpcDescription
#endif // !UNICODE


// Экспортный номер - 416
//------------------------------------------------------------------------------
// для документа pDoc изменяет параметры описания спецификации с индексом index
// и/или делает его активным, если state = true
// index = -1 - текущее описание, (для документа-спецификации не используется)
// если param = NULL - меняется только состояние
// ---
int LIB_FUNC ksSetSpcDescription( reference      pDoc,    // указатель на документ
											            int            index,	  // индекс описания СП в документе
 											            SpcDescrParam* param,   // параметры описания
                                  unsigned char  state ); // состояние: true - активное, false - неактивное

// Экспортный номер - 821
//------------------------------------------------------------------------------
// для документа pDoc изменяет параметры описания спецификации с индексом index
// и/или делает его активным, если state = true
// index = -1 - текущее описание, (для документа-спецификации не используется)
// если param = NULL - меняется только состояние (Unicode)
// ---
int LIB_FUNC ksSetSpcDescriptionW( reference       pDoc,    // указатель на документ
											             int             index,	  // индекс описания СП в документе
 											             SpcDescrParamW* param,   // параметры описания
                                   unsigned char   state ); // состояние: true - активное, false - неактивное

#ifdef _UNICODE
#define ksSetSpcDescriptionT  ksSetSpcDescriptionW
#else
#define ksSetSpcDescriptionT  ksSetSpcDescription
#endif // !UNICODE


// Экспортный номер - 417
//------------------------------------------------------------------------------
// для документа pDoc добавляет описание спецификации
// ---
int LIB_FUNC ksAddSpcDescription( reference      pDoc,     // указатель на документ
 										              SpcDescrParam* param );  // параметры описания


// Экспортный номер - 822
//------------------------------------------------------------------------------
// для документа pDoc добавляет описание спецификации (Unicode)
// ---
int LIB_FUNC ksAddSpcDescriptionW( reference       pDoc,     // указатель на документ
 										               SpcDescrParamW* param );  // параметры описания

#ifdef _UNICODE
#define ksAddSpcDescriptionT  ksAddSpcDescriptionW
#else
#define ksAddSpcDescriptionT  ksAddSpcDescription
#endif // !UNICODE


// Экспортный номер - 418
//------------------------------------------------------------------------------
// для документа pDoc удалить параметры описания спецификации с индексом index
// ---
int LIB_FUNC ksDeleteSpcDescription( reference      pDoc,    // указатель на документ
												             int            index);  // индекс описания СП в документе

// Экспортный номер - 428
//------------------------------------------------------------------------------
// Получить  указатель  текущего объекта СП ( выделенного или редактируемого в таблице СП )
// Функция работает для видимых таблиц СП
// ---
reference LIB_FUNC ksGetCurrentSpcObject();

// Экспортный номер - 429
//------------------------------------------------------------------------------------------------
// Установить текущий объект СП
// либо по указателю объекта, либо по индексу объекта
// Функция работает для видимых таблиц СП.
// Функция возвращает 0 в случае неудачи и 1 в случае удачи
//------------------------------------------------------------------------------------------------
int LIB_FUNC ksSetCurrentSpcObject( reference spcObj, int index );

// Экспортный номер - 430
//------------------------------------------------------------------------------
// Выдать массив значений для определенного типа колонки и исполнения
// Номер блока block = 0 - число исполнений меньше количества исполнений в бланке спецификации
// ( для групповой спецификации 2.113-75 число исполнений меньше 10 )
// Для колонки типа "запись" функция вернет массив значений записи, а для колонки
// состоящей из одного элемента - массив из одного элемента, соответствующего типа.
// Тип возвращаемого массива - LTVARIANT_ARR
// ---
reference LIB_FUNC ksGetSpcObjectColumnValues( reference spcObj,        // объект спецификации
                                               unsigned int columnType, // тип колонки SPC_CLM_FORMAT...SPC_CLM_USER
                                               unsigned int ispoln,     // номер колонки данного типа начиная с 1
                                               unsigned int block );    // номер блока

// Экспортный номер - 370
//------------------------------------------------------------------------------
//  Для документа спецификации получить количество листов
//  spcDoc = 0 - для текущей спецификации
// ---
int LIB_FUNC ksGetSpcDocumentPagesCount( reference spcDoc );

// Экспортный номер - 389
//-------------------------------------------------------------------------------------------------
// Проверить разрешена ли работа со спецификацией
//-------------------------------------------------------------------------------------------------
int LIB_FUNC ksIsModuleSpecificationActive();

// Экспортный номер - 435
//------------------------------------------------------------------------------
// Управление подключением модуля спецификации для режима сетевой работы системы
// attach: 1 включить работу со спецификацией; 0 - выключить работу со спецификацией
// Функция возвращает 1, если был инициирован процесс подключения или отключения СП.
// В случае неудачи возвращается 0
//
// ---
int  LIB_FUNC ksModuleSpecification( unsigned char attach );

// Экспортный номер - 436
//------------------------------------------------------------------------------------
// Выдать ширину колонки width.
// numColumn  - номер колонки.
// cellOrText - >0 ширина ячейки или 0  ширина текста в ячейке
//---
double LIB_FUNC ksGetWidthColumnSpc( int numColumn, unsigned char cellOrText );

// Экспортный номер - 703    
//------------------------------------------------------------------------------
// Изменения параметров настроек спецификации документа
// Если pDoc == 0, то для текущего документа
// Если index == -1, то для текущего описания спецификации 
// Для документа спецификации : настройки можно заменить всегда
// Для графиеского документа : в случае, если документ подключен к 
// спецификации или включен режим "Спецификация на листе".
// Для 3d документа : в случае, если документ подключен к спецификации.
// ---
int LIB_FUNC ksSetTuningSpcStyleParam( reference             pDoc,  // указатель на документ
                                       int                   index,	// индекс описания СП в документе
                                       SpcTuningStyleParam * par ); // структура параметров

// Экспортный номер - 823    
//------------------------------------------------------------------------------
// Изменения параметров настроек спецификации документа
// Если pDoc == 0, то для текущего документа
// Если index == -1, то для текущего описания спецификации 
// Для документа спецификации : настройки можно заменить всегда
// Для графиеского документа : в случае, если документ подключен к 
// спецификации или включен режим "Спецификация на листе".
// Для 3d документа : в случае, если документ подключен к спецификации. (Unicode)
// ---
int LIB_FUNC ksSetTuningSpcStyleParamW( reference              pDoc,  // указатель на документ
                                        int                    index,	// индекс описания СП в документе
                                        SpcTuningStyleParamW * par ); // структура параметров

#ifdef _UNICODE
#define ksSetTuningSpcStyleParamT  ksSetTuningSpcStyleParamW
#else
#define ksSetTuningSpcStyleParamT  ksSetTuningSpcStyleParam
#endif // !UNICODE


// Экспортный номер - 704    
//------------------------------------------------------------------------------
// Получение параметров настроек спецификации документа
// Если pDoc == 0, то для текущего документа
// Если index == -1, то для текущего описания спецификации 
// Для документа спецификации : настройки можно взять всегда
// Для графиеского документа : в случае, если документ подключен к 
// спецификации или включен режим "Спецификация на листе".
// Для 3d документа : в случае, если документ подключен к спецификации.
// ---
int LIB_FUNC ksGetTuningSpcStyleParam( reference pDoc,              // указатель на документ
                                       int index,	                  // индекс описания СП в документе
                                       SpcTuningStyleParam * par ); // структура параметров



// Экспортный номер - 824    
//------------------------------------------------------------------------------
// Получение параметров настроек спецификации документа
// Если pDoc == 0, то для текущего документа
// Если index == -1, то для текущего описания спецификации 
// Для документа спецификации : настройки можно взять всегда
// Для графиеского документа : в случае, если документ подключен к 
// спецификации или включен режим "Спецификация на листе".
// Для 3d документа : в случае, если документ подключен к спецификации. (Unicode)
// ---
int LIB_FUNC ksGetTuningSpcStyleParamW( reference pDoc,              // указатель на документ
                                        int index,	                  // индекс описания СП в документе
                                        SpcTuningStyleParamW * par ); // структура параметров

#ifdef _UNICODE
#define ksGetTuningSpcStyleParamT  ksGetTuningSpcStyleParamW
#else
#define ksGetTuningSpcStyleParamT  ksGetTuningSpcStyleParam
#endif // !UNICODE


// Экспортный номер - 709    
//------------------------------------------------------------------------------------------------
//  Получить геометрию в виде группы, подключенную к объекту спецификации
//------------------------------------------------------------------------------------------------
reference LIB_FUNC ksGetSpcObjGeometry(  reference  spcObj );

// Экспортный номер - 756
//-----------------------------------------------------------------------------
//  [31.03.2005]
//  Получить геометрию в виде группы, подключенную к объекту спецификации
//  geomMode  = 0 -  только геометрия
//            = 1 -  только линии выноски
//            = 2 -  геометрия и линии выноски
// ---
reference LIB_FUNC ksGetSpcObjGeometryEx( reference  spcObj, int geomMode );


// Экспортный номер - 723    
//-------------------------------------------------------------------------------------------------
// Выдать текст объекта СП для определенного типа колонки и исполнения в виде
// динамического массива  TEXT_LINE_ARR
// Номер блока block = 0 - число исполнений меньше количества исполнений в бланке спецификации
// ( для групповой спецификации 2.113-75 число исполнений меньше 10 )
// функция возвращает указатель на динамический массив в случае успеха или 
// 0 в случае ошибки
//-------------------------------------------------------------------------------------------------
reference LIB_FUNC ksGetSpcObjectColumnTextEx ( reference    spcObj,     //объект спецификации
                                                unsigned int columnType, //тип колонки SPC_CLM_FORMAT...SPC_CLM_USER
                                                unsigned int ispoln,     //номер колонки данного типа начиная с 1
                                                unsigned int block );    //номер блока

// Экспортный номер - 724    
//-------------------------------------------------------------------------------------------------
// Установить текст для определенного типа колонки и исполнения
// Номер блока block = 0 - число исполнений меньше количества исполнений в бланке спецификации
// ( для групповой спецификации 2.113-75 число исполнений меньше 10 )
// функция возвращает 1 в случае успеха или 0 в случае неудачи
// функция работает в режиме создания нового или редактирования существующего объекта спецификации
// ksSpcObjectCreate(...); или ksSpcObjectEdit(...);
//   .....
//   ksSetSpcObjectColumnTextEx(...);
//   .....
// reference spsObj = ksSpcObjectEnd();
//-------------------------------------------------------------------------------------------------
int LIB_FUNC ksSetSpcObjectColumnTextEx  ( unsigned int columnType, //тип колонки SPC_CLM_FORMAT...SPC_CLM_USER
                                           unsigned int ispoln,     //исполнение данного типа начиная с 1
                                           unsigned int block,      //номер блока
                                           reference    p );        //указатель на динамический массив строк

//-------------------------------------------------------------------------------------------------
// Выдать отображаемый текст объекта СП для колонки количество и исполнения в виде
// динамического массива TEXT_LINE_ARR
// Номер блока block = 0 - число исполнений меньше количества исполнений в бланке спецификации
// ( для групповой спецификации 2.113-75 число исполнений меньше 10 )
// функция возвращает указатель на динамический массив в случае успеха или 
// 0 в случае ошибки
//-------------------------------------------------------------------------------------------------
reference LIB_FUNC ksGetSpcObjectSummaryCountText( reference spcObj, //объект спецификации
                                                              unsigned int ispoln, //номер колонки данного типа начиная с 1
                                                              unsigned int block ); //номер блока

// Экспортный номер - 733  
//-----------------------------------------------------------------------------
// [17.4.04]
// Открыто ли окно спецификации в подчиненном режиме для указанного документа
// Если doc = 0 - для активного документа
// Функция возвращает 0 - не открыто, 1 - открыто, 2- открыто и активно
// ---
int LIB_FUNC ksIsSlaveSpcOpened( reference doc );

// Экспортный номер - 757
//-----------------------------------------------------------------------------------
// [6.06.05]
// Установить выравнивание для текста колонки объекта спецификации
// align :
// 0 - Выравнивание влево
// 1 - Выравнивание по центру
// 2 - Выравнивание вправо 
// 3 - Выравнивание по ширине
// ---
int LIB_FUNC ksSetSpcObjectColumnTextAlign( reference spcObj,       //объект спецификации
                                            int columnNumber,       //номер колонки, начиная с 1
                                            int lineIndex,          //индекс строки текста
                                            int align );            //выравнивание

// Экспортный номер - 766
//-----------------------------------------------------------------------------------
// [16/07/05]
// Получить выравнивание для текста колонки объекта спецификации
// 0 - Выравнивание влево
// 1 - Выравнивание по центру
// 2 - Выравнивание вправо 
// 3 - Выравнивание по ширине
// ---
int LIB_FUNC ksGetSpcObjectColumnTextAlign( reference spcObj,        //объект спецификации
                                            int columnNumber,        //номер колонки, начиная с 1
                                            int lineIndex );         //индекс строки текста


// Экспортный номер - 764
//-------------------------------------------------------------------------------
// [16/07/05]
// Получить номер атрибута объекта спецификации
// ---
double LIB_FUNC ksGetSpcObjectAttributeNumber( reference spcObj );   //объект спецификации


// Экспортный номер - 765
//-------------------------------------------------------------------------------
// [16/07/05]
// Установить номер атрибута объекта спецификации
// если attrNumber == 0 то удалить атрибут 
// ---
int LIB_FUNC ksSetSpcObjectAttributeNumber( reference spcObj,        //объект спецификации
                                            double attrNumber );     //номер типа атрибута

// Экспортный номер - 767
//-------------------------------------------------------------------------------
// [16/07/05]
// Получить суммарное количество для одинаковых объектов
// для СП групповая А
// blockNumber = 0 - постоянные данные
//               1 и далее номера блоков для исполнений переменных данных
// для остальных СП 
// blockNumber = 1
// ---
double LIB_FUNC ksGetSpcObjectSummaryCount( reference spcObj,        //объект спецификации
                                            int ispoln,              //номер колонки типа "количество", начиная с 1( актуально для СП типа Б )
                                            int blockNumber );       //номер блока, начиная с 0 ( актуально для СП типа A )

//-------------------------------------------------------------------------------
// Установить материал в объект спецификации  и связанный с ним документ.
// Текст материала передается в колонку материал. 
// Если c объектом спецификации связана модель или чертеж то материал и плотность передаются в документ. 
// Функция возвращает 1 если материал установлен.   
// ---
int LIB_FUNC ksSetSpcObjectMaterial( reference spcObj, LPSTR material, double density );


//-------------------------------------------------------------------------------
// Установить материал в объект спецификации  и связанный с ним документ. Unicode
// Текст материала передается в колонку материал. 
// Если c объектом спецификации связана модель или чертеж то материал и плотность передаются в документ.   
// Функция возвращает 1 если материал установлен.  
// ---
int LIB_FUNC ksSetSpcObjectMaterialW( reference spcObj, LPWSTR material, double density );

#ifdef _UNICODE
#define ksSetSpcObjectMaterialT  ksSetSpcObjectMaterialW
#else
#define ksSetSpcObjectMaterialT  ksSetSpcObjectMaterial
#endif // !UNICODE


//-------------------------------------------------------------------------------
// Получить отображаемое имя исполнения
// ---
int LIB_FUNC ksGetSpcPerformanceName( int   index,	      // индекс описания СП в документе
                                      int   ispoln,      // номер колонки типа "количество", начиная с 1( актуально для СП типа Б )
                                      int   blockNumber, // номер блока, начиная с 0 ( актуально для СП типа A ) 
                                      LPSTR name,        // имя исполнения
                                      int   nameLen );   // длина буфера строки


//-------------------------------------------------------------------------------
// Получить отображаемое имя исполнения
// ---
int LIB_FUNC ksGetSpcPerformanceNameW( int    index,	      // индекс описания СП в документе
                                       int    ispoln,      // номер колонки типа "количество", начиная с 1( актуально для СП типа Б )
                                       int    blockNumber, // номер блока, начиная с 0 ( актуально для СП типа A ) 
                                       LPWSTR name,        // имя исполнения
                                       int    nameLen );   // длина буфера строки

#ifdef _UNICODE
#define ksGetSpcPerformanceNameT  ksGetSpcPerformanceNameW
#else
#define ksGetSpcPerformanceNameT  ksGetSpcPerformanceName
#endif // !UNICODE


//-------------------------------------------------------------------------------
// Установить отображаемое имя исполнения
// ---
int LIB_FUNC ksSetSpcPerformanceName( int   index,	     // индекс описания СП в документе
                                      int   ispoln,      // номер колонки типа "количество", начиная с 1( актуально для СП типа Б )
                                      int   blockNumber, // номер блока, начиная с 0 ( актуально для СП типа A ) 
                                      LPSTR name );      // имя исполнения


//-------------------------------------------------------------------------------
// Установить отображаемое имя исполнения
// ---
int LIB_FUNC ksSetSpcPerformanceNameW( int    index,	     // индекс описания СП в документе
                                       int    ispoln,      // номер колонки типа "количество", начиная с 1( актуально для СП типа Б )
                                       int    blockNumber, // номер блока, начиная с 0 ( актуально для СП типа A ) 
                                       LPWSTR name );      // имя исполнения

#ifdef _UNICODE
#define ksSetSpcPerformanceNameT  ksSetSpcPerformanceNameW
#else
#define ksSetSpcPerformanceNameT  ksSetSpcPerformanceName
#endif // !UNICODE


// [12.02.2009]
// Экспортный номер - 992
//-------------------------------------------------------------------------------------------------
// Удалить связки документа-источника( графический, 3D, спецификациия)
// с документом-владельцем объекта СП;
//-------------------------------------------------------------------------------------------------
int LIB_FUNC ksSpcDocLinksClear( reference pDoc );

// [9.12.2011]
// Экспортный номер - 1023
//-------------------------------------------------------------------------------------------------
// Удалить связки документа-источника( графический, 3D, спецификациия)
// с документом-владельцем объекта СП;
// mode - 1 удалить все ссылки, 0 - удалить ссылки на не найденные файлы 
//-------------------------------------------------------------------------------------------------
int LIB_FUNC ksSpcDocLinksClearEx( reference pDoc, int mode );

// [22.02.2011]
// Экспортный номер - 1020
//-------------------------------------------------------------------------------
//  librarySpcStyle = 1 использовать стиль СП из библиотеки, а не втянутый в документ. 
// ---
int LIB_FUNC  ksSetApplyLibrarySpcStyle( int librarySpcStyle );

// [22.02.2011]
// Экспортный номер - 1020
//-------------------------------------------------------------------------------
//  возвращает 1 - для работы со спецификацией использовать стиль СП из библиотеки, а не втянутый в документ. 
//             0 - для работы со спецификацией использовать стиль втянутый в документ. 
// ---
int LIB_FUNC  ksGetApplyLibrarySpcStyle();

// [23.12.2015]
// Экспортный номер - 1054
//-------------------------------------------------------------------------------
//  возвращает 1 - флаг Синхронизировать со свойствами компонента взведен
//             0 - флаг Синхронизировать со свойствами компонента не взведен. 
// ---
long LIB_FUNC  ksGetSpcPropertyFill( reference spcObj );

// [23.12.2015]
// Экспортный номер - 1055
//-------------------------------------------------------------------------------
//  Взвести флаг Синхронизировать со свойствами компонента
// ---
int LIB_FUNC  ksSetSpcPropertyFill( reference spcObj, long val );


} // extern "C"


#endif // __LT_SPC_H


